package ar.edu.unicen.exa.isistan.archassis.ia.api;

import java.util.HashMap;
import java.util.Map;

import ar.edu.unicen.exa.isistan.archassis.ia.api.db.ItemCase;
import ar.edu.unicen.exa.isistan.archassis.ia.api.db.JavaClass;
import ar.edu.unicen.exa.isistan.archassis.ia.api.db.ListCases;
import ar.edu.unicen.exa.isistan.archassis.ia.util.BestCaseCondition;

public class JavaClassEvalResult {
	private JavaClass inputJavaClass;
	private Map<ListCases, JavaClassListCasesEvalResult> map;
//	private JavaClass casesJavaClass;
//	private ListCasesBean listCases;
//	private ItemCase itemCase;
	
//	private float mejorHecho;
//	private float mejorSobra;
	
	public JavaClassEvalResult(JavaClass inputJavaClass) {
		this.inputJavaClass = inputJavaClass;
//		this.mejorHecho = 0;
//		this.mejorSobra = 1;
		this.map = new HashMap<ListCases, JavaClassListCasesEvalResult>();
	}
	
	/**
	 * Evalua si la clase dada es mejor que la que se encuentra guardada.
	 * @param javaClass
	 * @param itemCase
	 * @param listCasesBean
	 */
	public void eval(JavaClass javaClass, ItemCase itemCase, ListCases listCasesBean) {
		
		float hecho = javaClass.eval(inputJavaClass);
		if (hecho == 0) {
			return;
		}
		float sobra = 1 - inputJavaClass.eval(javaClass);
	
		JavaClassListCasesEvalResult javaClassListCasesEvalResult = map.get(listCasesBean);
		if (javaClassListCasesEvalResult == null) {
			javaClassListCasesEvalResult = new JavaClassListCasesEvalResult(listCasesBean);
			javaClassListCasesEvalResult.set(itemCase, javaClass, hecho, sobra);
			map.put(listCasesBean, javaClassListCasesEvalResult);
			return;
		}
		
		
		if (BestCaseCondition.isBetter(javaClassListCasesEvalResult.getHecho(), hecho, javaClassListCasesEvalResult.getSobra(), sobra)) {
			javaClassListCasesEvalResult.set(itemCase, javaClass, hecho, sobra);
		}
	}

	public JavaClass getInputJavaClass() {
		return inputJavaClass;
	}

	public Map<ListCases, JavaClassListCasesEvalResult> getMap() {
		return map;
	}
	
	
}
